# -*- coding: utf-8 -*-
"""
VR 康复系统关键性能指标可视化
--------------------------------
指标说明（对应数据来源于项目报告）：
1. 姿态精度（mm）                → 2
2. 角度误差（°）                  → 0.5
3. 端到端延迟（ms）              → 20
4. 触觉响应时间（ms）            → 5
5. 收敛迭代次数（次）            → 30
6. 数据成功率（%）                → 99.9
7. 系统功耗（W）                  → 15
8. 用户满意度（5 分制）           → 4.6
"""

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# --------------------------- 数据准备 ---------------------------
data = {
    "指标": [
        "姿态精度 (mm)",
        "角度误差 (°)",
        "端到端延迟 (ms)",
        "触觉响应 (ms)",
        "收敛迭代次数",
        "数据成功率 (%)",
        "系统功耗 (W)",
        "用户满意度 (5分制)"
    ],
    "数值": [2, 0.5, 20, 5, 30, 99.9, 15, 4.6]
}
df = pd.DataFrame(data)

# --------------------------- 绘图设置 ---------------------------
sns.set_style("whitegrid")          # 使用清爽的网格背景
plt.figure(figsize=(10, 6))         # 图形尺寸
palette = sns.color_palette("Blues_d", n_colors=len(df))

# 绘制柱状图
bars = plt.bar(df["指标"], df["数值"], color=palette, edgecolor="black")

# 为每根柱子添加数值标签（保留两位小数）
for bar in bars:
    height = bar.get_height()
    plt.text(
        bar.get_x() + bar.get_width() / 2,
        height + max(df["数值"]) * 0.02,   # 稍微抬高一点避免遮挡
        f"{height:.2f}",
        ha="center",
        va="bottom",
        fontsize=10,
        color="black"
    )

# --------------------------- 细节美化 ---------------------------
plt.title("VR 康复系统关键性能指标", fontsize=16, weight="bold", pad=15)
plt.ylabel("数值", fontsize=12)
plt.xticks(rotation=45, ha="right", fontsize=11)   # X 轴标签倾斜，防止重叠
plt.ylim(0, max(df["数值"]) * 1.15)               # 留出足够的上部空间给标签
plt.tight_layout()                               # 自动调整子图间距

# --------------------------- 保存/展示 ---------------------------
plt.savefig("vr_performance_metrics.png", dpi=300, bbox_inches="tight")
plt.show()



